home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.tree;
-
- import java.io.PrintStream;
- import java.util.Hashtable;
- import sun.tools.asm.Assembler;
- import sun.tools.asm.Label;
- import sun.tools.java.Environment;
- import sun.tools.java.Type;
-
- public class ForStatement extends Statement {
- Statement init;
- Expression cond;
- Expression inc;
- Statement body;
-
- public ForStatement(int var1, Statement var2, Expression var3, Expression var4, Statement var5) {
- super(92, var1);
- this.init = var2;
- this.cond = var3;
- this.inc = var4;
- this.body = var5;
- }
-
- long check(Environment var1, Context var2, long var3, Hashtable var5) {
- var3 = ((Statement)this).reach(var1, var3);
- CheckContext var6 = new CheckContext(var2, this);
- if (this.init != null) {
- var3 = this.init.check(var1, var6, var3, var5);
- }
-
- if (this.cond != null) {
- ConditionVars var7 = this.cond.checkCondition(var1, var6, ((Statement)this).reach(var1, var3), var5);
- this.cond = ((Node)this).convert(var1, var6, Type.tBoolean, this.cond);
- var3 = this.body.check(var1, var6, var7.vsTrue, var5);
- if (this.inc != null) {
- this.inc.check(var1, var6, var3 & var6.vsContinue, var5);
- }
-
- var3 = var6.vsBreak & var7.vsFalse;
- } else {
- var3 = this.body.check(var1, var6, var3, var5);
- if (this.inc != null) {
- this.inc.check(var1, var6, var3 & var6.vsContinue, var5);
- }
-
- var3 = var6.vsBreak;
- }
-
- return var2.removeAdditionalVars(var3);
- }
-
- public Statement inline(Environment var1, Context var2) {
- var2 = new Context(var2, this);
- if (this.init != null) {
- Statement[] var3 = new Statement[]{this.init, this};
- this.init = null;
- return (new CompoundStatement(super.where, var3)).inline(var1, var2);
- } else {
- if (this.cond != null) {
- this.cond = this.cond.inlineValue(var1, var2);
- }
-
- if (this.body != null) {
- this.body = this.body.inline(var1, var2);
- }
-
- if (this.inc != null) {
- this.inc = this.inc.inline(var1, var2);
- }
-
- return this;
- }
- }
-
- public Statement copyInline(Context var1, boolean var2) {
- ForStatement var3 = (ForStatement)((Node)this).clone();
- if (this.init != null) {
- var3.init = this.init.copyInline(var1, var2);
- }
-
- if (this.cond != null) {
- var3.cond = this.cond.copyInline(var1);
- }
-
- if (this.body != null) {
- var3.body = this.body.copyInline(var1, var2);
- }
-
- if (this.inc != null) {
- var3.inc = this.inc.copyInline(var1);
- }
-
- return var3;
- }
-
- public int costInline(int var1) {
- int var2 = 2;
- if (this.init != null) {
- var2 += this.init.costInline(var1);
- }
-
- if (this.cond != null) {
- var2 += this.cond.costInline(var1);
- }
-
- if (this.body != null) {
- var2 += this.body.costInline(var1);
- }
-
- if (this.inc != null) {
- var2 += this.inc.costInline(var1);
- }
-
- return var2;
- }
-
- public void code(Environment var1, Context var2, Assembler var3) {
- CodeContext var4 = new CodeContext(var2, this);
- if (this.init != null) {
- this.init.code(var1, var4, var3);
- }
-
- Label var5 = new Label();
- Label var6 = new Label();
- var3.add(super.where, 167, var6);
- var3.add(var5);
- if (this.body != null) {
- this.body.code(var1, var4, var3);
- }
-
- var3.add(var4.contLabel);
- if (this.inc != null) {
- this.inc.code(var1, var4, var3);
- }
-
- var3.add(var6);
- if (this.cond != null) {
- this.cond.codeBranch(var1, var4, var3, var5, true);
- } else {
- var3.add(super.where, 167, var5);
- }
-
- var3.add(var4.breakLabel);
- }
-
- public void print(PrintStream var1, int var2) {
- super.print(var1, var2);
- var1.print("for (");
- if (this.init != null) {
- this.init.print(var1, var2);
- var1.print(" ");
- } else {
- var1.print("; ");
- }
-
- if (this.cond != null) {
- this.cond.print(var1);
- var1.print(" ");
- }
-
- var1.print("; ");
- if (this.inc != null) {
- this.inc.print(var1);
- }
-
- var1.print(") ");
- if (this.body != null) {
- this.body.print(var1, var2);
- } else {
- var1.print(";");
- }
- }
- }
-